home *** CD-ROM | disk | FTP | other *** search
/ Language/OS - Multiplatform Resource Library / LANGUAGE OS.iso / p4 / p4-1_2b.lha / p4-1.2b / contrib_f / comm_master.f < prev    next >
Text File  |  1992-10-19  |  4KB  |  151 lines

  1.       program master
  2.  
  3.       include 'p4f.h'
  4.  
  5.       integer i,slaves,type,from,start,done,time,retcde,recvlen
  6.       real a(600000)
  7.       integer tagcnt, tagdat, tagend
  8.       parameter (tagcnt = 10)
  9.       parameter (tagdat = 20)
  10.       parameter (tagend = 30)
  11.  
  12.       call p4init()
  13.       call p4crpg()
  14.       call p4setavlbuf(1,100)
  15.       print *,'Master has started'
  16.  
  17.       n = 50
  18.       print *,'Enter interation count:'
  19.       read(*,*) n
  20.       slaves = p4ntotids() - 1
  21.       length = 8
  22.  
  23.       do 10 i = 1,slaves
  24.          print *,'MASTER sending control message to ',i
  25.       call p4sendr(tagcnt,i,n,length,retcde)
  26. 10    continue
  27.  
  28. C Initialize socket connections between the slaves
  29.       call p4sendr(tagcnt,1,a,length,retcde)
  30.       type = tagcnt
  31.       from = -1
  32.       call p4recv(type,from,a,length,recvlen,retcde)
  33.  
  34.       print *,'Number of slaves = ',slaves
  35.       print *,' '
  36.       print *,'SEND to one slave only'         
  37.       do 55 i = 6,19
  38.          length = 2**i  
  39.          time = 0
  40.          do 51 k = 1,n
  41.       start = p4clock()
  42.       call p4sendr(i,1,a,length,retcde)
  43.       done = p4clock()
  44.             time = done - start + time
  45. 51       continue
  46.          time = time / n
  47.          print *,'Total time to send message = ',time,
  48.      &    '  bytes = ',length
  49. C        print *,'Buffer pools------------------'
  50. C        call p4avlbufs()
  51. 55    continue
  52.  
  53.       print *,' '
  54.       print *,'SENDR to one slave only'
  55.       do 60 i = 6,19
  56.          length = 2**i  
  57.          time = 0
  58.          do 61 k = 1,n
  59.       start = p4clock()
  60.       call p4sendr(i,1,a,length,retcde)
  61.       done = p4clock()
  62.             time = done - start + time
  63. 61       continue
  64.          time = time / n
  65.          print *,'Total time to send and acknowledge message = ',time,
  66.      &    '  bytes = ',length
  67. 60    continue
  68.  
  69.       print *,' '
  70.       print *,'SEND and RECEIVE sent message from one slave only'
  71.       do 65 i = 6,19
  72.          length = 2**i  
  73.          time = 0
  74.          do 66 k = 1,n
  75.       start = p4clock()
  76.       call p4send(i,1,a,length,retcde)
  77.       type = i
  78.       from = -1
  79.       call p4recv(type,from,a,length,recvlen,retcde)
  80.       done = p4clock()
  81.             time = done - start + time
  82. 66       continue
  83.          time = time / n
  84.          print *,'Total time for send and receive = ',time,
  85.      &     '  bytes = ',length
  86. 65    continue
  87.  
  88.       print *,' '
  89.       print *,'SEND message and RECEIVE time from one slave'
  90.       do 67 i = 6,19
  91.          length = 2**i  
  92.          time = 0
  93.          do 68 k = 1,n
  94.       start = p4clock()
  95.       call p4send(i,1,a,length,retcde)
  96.       type = i
  97.       from = -1
  98.       call p4recv(type,from,done,4,recvlen,retcde)
  99.             time = done - start + time
  100. 68       continue
  101.          time = time / n
  102.          print *,'Total time for send and receive slave = ',time,
  103.      &     '  bytes = ',length
  104. 67    continue
  105.  
  106.       print *,' '
  107.       print *,'SEND message around a ring of slaves'
  108.       do 70 i = 6,19
  109.          length = 2**i  
  110.          time = 0
  111.          do 72 k = 1,n
  112.       start = p4clock()
  113.       call p4send(i,1,a,length,retcde)
  114.       type = i
  115.       from = -1
  116.       call p4recv(type,from,a,length,recvlen,retcde)
  117.       done = p4clock()
  118.             time = done - start + time
  119. 72       continue
  120.          time = time / n
  121.          print *,'Total time for broadcast = ',time,'  bytes = ',length
  122. 70    continue
  123.  
  124.       print *,' '
  125.       print *,'SENDR message to each slave sequentially'
  126.       do 80 i = 6,19
  127.          length = 2**i  
  128.          time = 0
  129.          do 81 k = 1,n
  130.       start = p4clock()
  131.             do 82 j = 1,slaves
  132.       call p4sendr(i,j,a,length,retcde)
  133. 82          continue
  134.       done = p4clock()
  135.          time = done - start + time
  136. 81       continue
  137.          time = time / n
  138.          print *,'Total time for broadcast = ',time,'  bytes = ',length
  139. 80    continue
  140.  
  141.       length = 0
  142.       do 90 i = 1,slaves
  143.       print *,'Master sending end message to ',i
  144.       call p4sendr(tagend,i,a,length,retcde)
  145. 90    continue
  146.  
  147. 999     call p4cleanup()
  148.       print *,'Master exiting and has cleaned up'
  149.       end
  150.  
  151.